uname関数は、稼動中のシステム(コンピュータとOS)に関する情報を取得します。

この関数は、C言語のライブラリ関数(標準関数)ではありませんので、コンパイラにより、使えない場合があります。

#include <sys/utsname.h>
int uname(struct utsname *buf);

*bufは取得した状態を格納するutsname構造体を指定します。

戻り値として、処理が成功した場合は0が、エラーの場合は-1を返します。

utsname構造体は、次のメンバにより構成されています。(各メンバは文字列(char型の配列)です。)

メンバ名 内容
sysname OS(カーネル)の名称です。
nodename ホスト名称です。
release OS(カーネル)のリリース番号です。
version OS(カーネル)のバージョンです。
machine コンピュータ(ハードウェア)の種類です。

プログラム 例

#include <stdio.h>
#include <sys/utsname.h>

int main()
{
  struct utsname      uname_buff;

  if (uname(&uname_buff) == 0) {
    /* システム情報を表示 */
    printf('OSの名称 : %s\n',uname_buff.sysname);
    printf('ホスト名称 : %s\n',uname_buff.nodename);
    printf('OSのリリース番号 : %s\n',uname_buff.release);
    printf('OSのバージョン : %s\n',uname_buff.version);
    printf('コンピュータ(ハードウェア)の種類 : %s\n',uname_buff.machine);
 }
  else {
    perror('main ');
  }

  return 0;
}

例の実行結果

$ uname -a
Linux 10.1.168.192.in-addr.arpa 2.6.25.11-60.fc8
 #1 SMP Mon Jul 21 02:06:29 EDT 2008 i686 i686 i386 GNU/Linux
$
$ ./uname.exe
OSの名称 : Linux
ホスト名称 : 10.1.168.192.in-addr.arpa
OSのリリース番号 : 2.6.25.11-60.fc8
OSのバージョン : #1 SMP Mon Jul 21 02:06:29 EDT 2008
コンピュータ(ハードウェア)の種類 : i686
$